//
//  SubLayerTransformViewController.m
//  CoreAnimation
//
//  Created by 张国文 on 16/10/11.
//  Copyright © 2016年 hangzhouyijiyin. All rights reserved.
//

#import "SubLayerTransformViewController.h"

@interface SubLayerTransformViewController ()

@property (nonatomic, strong) UIView *containerView; // 容器
@property (nonatomic, strong) UIImageView *layerView1;
@property (nonatomic, strong) UIImageView *layerView2;

@end

@implementation SubLayerTransformViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.view.backgroundColor = [UIColor whiteColor];
    
    self.containerView = [[UIView alloc] initWithFrame:self.view.frame];
    self.containerView.backgroundColor = [[UIColor grayColor] colorWithAlphaComponent:0.5];
    [self.view addSubview:_containerView];
    
    self.layerView1 = [[UIImageView alloc] initWithFrame:CGRectMake(30, 50, 150, 150)];
    self.layerView1.image = [UIImage imageWithName:@"snowMan"];
    [self.containerView addSubview:_layerView1];
    
    self.layerView2 = [[UIImageView alloc] initWithFrame:CGRectMake(220, 50, 150, 150)];
    self.layerView2.image = [UIImage imageWithName:@"snowMan"];
    [self.containerView addSubview:_layerView2];
    
    // 运用subLayerTranform
    [self userSubLayerTransform];
}

// 运用subLayerTranform
- (void)userSubLayerTransform
{
#pragma mark - subLayerTransform的用法和3D变化的优势
    /**
     *
     灭点在设置m34的时候就已经设置，因此设置subLayerTransformde m34就是指定所有的子视图的灭点都在父视图的中心点(anchorPoint)
     个人的一个待证实的结论：即子视图自己修改anchorPoint的话，子视图的灭点会变化，而不是继承父视图的anchorPoint
     如果有多个视图或者图层，每个都做3D变换，那就需要分别设置相同的m34值，并且确保在变换之前都在屏幕中央共享同一个position，如果用一个函数封装这些操作的确会更加方便，但仍然有限制（例如，你不能在Interface Builder中摆放视图），这里有一个更好的方法。
     
     CALayer有一个属性叫做sublayerTransform。它也是CATransform3D类型，但和对一个图层的变换不同，它影响到所有的子图层。这意味着你可以一次性对包含这些图层的容器做变换，于是所有的子图层都自动继承了这个变换方法。
     
     相较而言，通过在一个地方设置透视变换会很方便，同时它会带来另一个显著的优势：灭点被设置在容器图层的中点，从而不需要再对子图层分别设置了。这意味着你可以随意使用position和frame来放置子图层，而不需要把它们放置在屏幕中点，然后为了保证统一的灭点用变换来做平移。
     */
    CATransform3D transform3D = CATransform3DIdentity;
    transform3D.m34 = - 1.0 / 500.0;
    self.containerView.layer.sublayerTransform = transform3D;
    
    self.layerView1.layer.transform = CATransform3DMakeRotation(M_PI / 4, 0, 1, 0);
    self.layerView2.layer.transform = CATransform3DMakeRotation(-M_PI / 4, 0, 1, 0);

    
}

@end
